www.gusucode.com > VC++ Canny算子提取边缘算法示例-源码程序 > VC++ Canny算子提取边缘算法示例-源码程序/code/源代码/ImageProcessingDoc.cpp
// ImageProcessingDoc.cpp : implementation of the CImageProcessingDoc class // #include "stdafx.h" #include "ImageProcessing.h" #include "ImageProcessingDoc.h" #include "GlobalApi.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc IMPLEMENT_DYNCREATE(CImageProcessingDoc, CDocument) BEGIN_MESSAGE_MAP(CImageProcessingDoc, CDocument) //{{AFX_MSG_MAP(CImageProcessingDoc) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) ON_COMMAND(ID_FILE_RELOAD, OnFileReload) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc construction/destruction CImageProcessingDoc::CImageProcessingDoc() { // TODO: add one-time construction code here InitDocVariable(); } CImageProcessingDoc::~CImageProcessingDoc() { FreeDocVariable(); } BOOL CImageProcessingDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc serialization void CImageProcessingDoc::Serialize(CArchive& ar) { m_pDibInit->Serialize(ar); if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc diagnostics #ifdef _DEBUG void CImageProcessingDoc::AssertValid() const { CDocument::AssertValid(); } void CImageProcessingDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc commands int CImageProcessingDoc::InitDocVariable() { m_pDibInit = new CDib; // added by tanhc in 2002-7-30, used to test some function m_pDibTest = new CDib; m_nColorIndex = 0; //-------------------------------------------- return 0; } int CImageProcessingDoc::FreeDocVariable() { delete m_pDibInit; m_pDibInit = NULL; // added by tanhc in 2002-7-30, used to test some function delete m_pDibTest ; m_pDibTest = NULL ; //-------------------------------------------- return 0; } void CImageProcessingDoc::OnFileSaveAs() { // TODO: Add your command handler code here CString strSaveFileType = "位图文件 (*.bmp;*.dib)|*.bmp; *.dib|All Files (*.*)|*.*||"; CFileDialog FileDlg(FALSE, "*.bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSaveFileType); CFile fileOpen ; if( FileDlg.DoModal() == IDOK ) { if(!fileOpen.Open( FileDlg.GetPathName() , CFile::modeCreate|CFile::modeWrite )){ AfxMessageBox("cannot create the file to save"); return; } if( !m_pDibInit->Write( &fileOpen ) ){ return; } fileOpen.Close(); } } /************************************************************************* * * \函数名称: * OnFileReload() * * \输入参数: * 无 * * \返回值: * 无 * * \说明: * 该函数响应ID_FILE_RELOAD点击的消息,并重载DIB * ************************************************************************* */ void CImageProcessingDoc::OnFileReload() { // 判断当前图像是否已经被改动 if (IsModified()) { // 提示用户该操作将丢失所有当前的修改 if (MessageBox(NULL, "重新打开图像将丢失所有改动!是否继续?", "系统提示", MB_ICONQUESTION | MB_YESNO) == IDNO) { // 用户取消操作,直接返回 return; } } CFile file; CString strPathName; CFileException fe; strPathName = GetPathName(); // 重新打开文件 if( !file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)) { // 失败 ReportSaveLoadException(strPathName, &fe, FALSE, AFX_IDP_FAILED_TO_OPEN_DOC); // 返回 return; } // 更改光标 BeginWaitCursor(); // 重新读取图象 if(!m_pDibInit->Read(&file)){ // 恢复光标形状 EndWaitCursor(); // 返回 return; } // 初始化胀标记为FALSE SetModifiedFlag(FALSE); // 刷新 UpdateAllViews(NULL); // 恢复光标形状 EndWaitCursor(); // 返回 return; }